home *** CD-ROM | disk | FTP | other *** search
- #! ../bin/mush -F!
- #
- # Mush digestifier. Makes a folder or a list of messages into a digest.
- #
- # A "digest" is a collection of E-mail messages bundled together into a
- # single message for ease of redistribution. The individual messages
- # in the digest are called "articles". Each article has a small set of
- # essential headers (usually From:, Date:, and Subject:) and is divided
- # from the preceding and following articles by an "article separator"
- # string (usually eight hyphens, "--------"). The Mush built-in command
- # "undigest" unpacks most digests, including those made by this script.
- #
- # Usage:
- # From your shell: digestify -f mailbox
- # From within mush:
- # First: cmd digest "set digest = '\!*' ; source digestify"
- # Then: digest [msg-list]
- # Or: message-selection-command | digest
- #
- # Note that by default it makes a digest of the ENTIRE folder!
- #
-
- #
- # Rudimentary sanity checks
- #
- if ! $?version
- echo "You must have Mush version 7.0 or higher to run this script"
- exit
- endif
- if ! $?thisfolder
- echo "You can't use this script as an init file; try using -F"
- exit
- endif
-
- #
- # Set up defaults
- #
- if ! $?digest
- set digest = *
- if $?interact
- unset interact # Assume non-interactive if no input list
- endif
- else
- set interact # Note that this is interactive
- if "X$digest" == X
- set digest = * # Default to all messages for empty input
- else
- $digest | set digest # Pre-expand message numbers
- endif
- endif
-
- #
- # Suppress any "that isn't set" messages from "unset"
- #
- if $?warning
- set savewarn
- endif
- unset warning oldpre oldpost oldindent oldign oldshow
-
- #
- # Save everything in case the user wants it back.
- # Could wrap all this with "if $?interact" but this script
- # might be read by "mush -F", in which case we need this.
- #
- if $?pre_indent_str
- set oldpre = "$pre_indent_str"
- endif
- if $?post_indent_str
- set oldpost = "$post_indent_str"
- endif
- if $?indent_str
- set oldindent = "$indent_str"
- endif
- if $?alwaysignore
- set oldign = "$alwaysignore"
- endif
- if $?show_hdrs
- set oldshow = "$show_hdrs"
- endif
- if $?quiet
- set oldquiet = "$quiet"
- endif
- if $?no_expand
- set savenoex
- endif
-
- #
- # Prepare to form the digest.
- #
- set indent_str no_expand alwaysignore=include quiet=await,newmail
- unset post_indent_str
- alias DIGEST $thisfolder # Any target in place of $thisfolder
- set pre_indent_str="--------" # Insert your digest separator here
- set show_hdrs=from,date,subject # Add any other headers you want
-
- #
- # Now do it. All that work for a two-line operation ....
- # NOTE: If you change DIGEST above, remove the "await" command here!
- # Backslashes prevent any cmd expansion from confusing us.
- #
- \delete $digest
- \mail -UH /dev/null -I $digest -s "Digest of $thisfolder" DIGEST; \await -T 1
-
- #
- # Clean out the deleted stuff if not interactive
- #
- if ! $?interact
- \update
- endif
-
- #
- # Be neat and put everything back the way it was.
- #
- unset indent_str no_expand alwaysignore quiet pre_indent_str show_hdrs
- unalias DIGEST
- if $?savenoex
- set no_expand
- endif
- if $?oldquiet
- set quiet = "$oldquiet"
- endif
- if $?oldpre
- set pre_indent_str = "$oldpre"
- endif
- if $?oldpost
- set post_indent_str = "$oldpost"
- endif
- if $?oldindent
- set indent_str = "$oldindent"
- endif
- if $?oldign
- set alwaysignore = "$oldign"
- endif
- if $?oldshow
- set show_hdrs = "$oldshow"
- endif
- unset oldpre oldpost oldindent oldign oldshow oldquiet nonoex digest
- if $?savewarn
- unset savewarn
- set warning
- endif
-